#ifndef __PROTO_H__
#define __PROTO_H__

/*
   server client 协议
   udp组播 
   组播地址+端口号
   数据类型
 */

#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <net/if.h>
#include <arpa/inet.h>

#define GROUP_IP "224.2.2.2"
#define RCV_PORT "6789"
#define MAX_SIZE 1024

#define MIN_CHN_ID  1
#define MAX_CHN_NR  200
#define MAX_CHN_ID  ((MAX_CHN_NR) + (MIN_CHN_ID) - 1)
#define CHN_LIST_ID 0

//单个频道列表结构
struct chn_list_entry {
	int8_t chnid; // > 0 描述本频道的频道号
	int8_t len; //自述长度,描述当前结构的大小
	char descr[1]; //变长数组
}__attribute__((packed));

//整个频道列表的结构 
struct chn_list_st {
	int8_t chnid; //0 
	//变长结构体, 有多少个频道, 就保存多少个这样的结构 
	struct chn_list_entry entrys[1];
}__attribute__((packed));

//频道的数据
struct chn_data_st {
	int8_t chnid; //频道号 MIN_CHN_ID ~ MAX_CHN_ID
	char msg[1];
}__attribute__((packed));

//共用体 
union chn_msg_st {
	int8_t chnid;
	struct chn_list_st chnlist;
	struct chn_data_st chndata;
};

#endif
